/**
 *	@file	radio_search.c
 *	@brief	ラジオ　ポケモン捜索隊データ生成
 *	@author	Miyuki Iwasawa
 *	@date	09.04.17
 */

#include "common.h"
#include "system/procsys.h"
#include "system/arc_util.h"
#include "system/arc_tool.h"
#include "system/bmp_list.h"
#include "system/bmp_menu.h"
#include "system/pm_str.h"
#include "system/msgdata.h"
#include "system/fontproc.h"
#include "system/snd_tool.h"
#include "system/buflen.h"
#include "system/wordset.h"
#include "system/pm_rtc.h"
#include "application/app_tool.h"
#include "msgdata/msg.naix"

#include "field/evwkdef.h"
#include "field/sysflag.h"
#include "field/sysflag_def.h"
#include "fielddata/script/saveflag.h"
#include "savedata/zukanwork.h"
#include "radio_prog.h"
#include "msgdata/msg_pg_radio.h"
#include "msgdata/msg_radio_p_search.h"

#define SEARCH_DATA_MAX	(13)

enum{
 FLAG_NONE,
 FLAG_YADON,
 FLAG_KOGANE,
 FLAG_SENKYO,
 FLAG_BADGE8,
 FLAG_BADGE9,
 FLAG_KANTO,
 FLAG_BADGE16,
 FLAG_MAX,
};

typedef struct{
 int heapID;
 u16 seq;
 u16 msg_id;
 u8	flag[FLAG_MAX];
 u8	data[SEARCH_DATA_MAX];
}RADIO_SEARCH_WORK;

static void search_ResInit(PM_RADIO_MAN* man);
static void search_ResRelease(PM_RADIO_MAN* man);


static const u8 DATA_SearchTable[SEARCH_DATA_MAX] = {
 FLAG_NONE,		//真っ暗闇の洞窟。フラッシュがあれば！
 FLAG_NONE,		//アルフの遺跡。様々な姿のアンノーン。
 FLAG_YADON,	//ヤドンの井戸。
 FLAG_KOGANE,	//焼けた塔にいる３匹。目撃情報
 FLAG_SENKYO,	//りゅうのあな。ミニリュウ。
 FLAG_BADGE8,	//うずまきじまの海底で目撃した、謎の影！
 FLAG_BADGE9,	//スズの塔の天辺に舞い降りた謎の影！
 FLAG_KANTO,	//トキワの森。ピカチュウ。
 FLAG_KANTO,	//おつきみやまのピッピの踊りについて。
 FLAG_KANTO,	//ふたごじま深部で出会ったのは、なんとカツラ！
 FLAG_BADGE16,	//プラチナとの繋がり。オリジンフォルム。
 FLAG_BADGE16,	//シンオウの話題。テンガンザン。
 FLAG_BADGE16,	//ハナダのどうくつ。不気味な影。
};

/**
 *	@brief	ラジオ　ポケモン捜索隊　初期化
 */
int RadioSearch_Init(PM_RADIO_MAN* man)
{
	RADIO_SEARCH_WORK* wk = NULL;

	wk = sys_AllocMemory(man->heapID,sizeof(RADIO_SEARCH_WORK));
	MI_CpuClear8(wk,sizeof(RADIO_SEARCH_WORK));

	man->ch_wk = (void*)wk;

	search_ResInit(man);

	//再生開始
	Snd_BgmStop(Snd_NowBgmNoGet(),0);
	RADIO_PLAY(RADIO_BGM_VARIETY);
	return 0;
}

/**
 *	@brief	ラジオ　ポケモン捜索隊 解放
 */
int RadioSearch_End(PM_RADIO_MAN* man)
{
	search_ResRelease(man);

	MI_CpuClear8(man->ch_wk,sizeof(RADIO_SEARCH_WORK));
	sys_FreeMemoryEz(man->ch_wk);
	man->ch_wk = NULL;

	return 0;
}

/**
 *	@brief	ラジオ　ポケモン捜索隊 再生メイン
 */
int RadioSearch_Play(PM_RADIO_MAN* man)
{
	RADIO_SEARCH_WORK* wk = (RADIO_SEARCH_WORK*)man->ch_wk;

	switch(wk->seq){
	case 0:	//ポケモン捜索隊再生
		RadioSub_SentencePlay(man,m_search_00_01);
		wk->seq++;
		break;
	case 1:
		if(!RadioSub_SentencePlayWait(man)){
			break;
		}
		RadioSub_SentencePlay(man,wk->data[wk->msg_id] + m_search_01_01);
		wk->seq++;
		break;
	case 2:
		if(!RadioSub_SentencePlayWait(man)){
			break;
		}
		wk->seq++;
		break;
	case 3:
		if(!RadioSub_MsgWaitScroll(man)){
			break;
		}
		//アイキャッチ
		RadioSub_EyeCatchPlay(man,m_search_00_02);
		wk->seq++;
		break;
	case 4:
		if(!RadioSub_EyeCatchPlayWait(man)){
			break;
		}
		//CMリクエスト
		man->cm_req_f = TRUE;
		return 1;
	}
	return 0;
}

/*
 *	@brief	ポケモン捜索隊用 必要なデータを初期化する
 */
static void search_ResInit(PM_RADIO_MAN* man)
{
	u8 num = 0,i;
	EVENTWORK* ev_sv;
	MYSTATUS* my;
	RADIO_SEARCH_WORK* wk = (RADIO_SEARCH_WORK*)man->ch_wk;

	man->msg_prog = MSGMAN_Create(MSGMAN_TYPE_NORMAL,ARC_MSG,NARC_msg_radio_p_search_dat,man->heapID);

	//番組タイトルとDJ名を通知
	MSGMAN_GetString(man->msg_prog,m_search_title,man->str_title);
	MSGMAN_GetString(man->msg_prog,m_search_dj,man->str_dj);

	//フラグ取得
	MI_CpuClear8(wk->flag,sizeof(u8)*FLAG_MAX);
	MI_CpuClear8(wk->data,sizeof(u8)*SEARCH_DATA_MAX);

	ev_sv = SaveData_GetEventWork(man->save);
	my = SaveData_GetMyStatus(man->save);
	wk->flag[FLAG_NONE] = TRUE;	//無条件
	wk->flag[FLAG_YADON] =EventWork_CheckEventFlag( ev_sv, FE_D26R0102_YADON_CLEAR );
	wk->flag[FLAG_KOGANE] = MyStatus_GetBadgeFlag(my,BADGE_ID_T25);
	wk->flag[FLAG_SENKYO] =EventWork_CheckEventFlag( ev_sv, FE_T25_RADIOSENKYO_END );
	{
		u8 badge = MyStatus_GetBadgeCount(my);
		if(badge >= 8){
			wk->flag[FLAG_BADGE8] = TRUE;
		}
		if(badge >= 9){
			wk->flag[FLAG_BADGE9] = TRUE;
		}
		if(badge >= 16){
			wk->flag[FLAG_BADGE16] = TRUE;
		}
	}
	wk->flag[FLAG_KANTO] = SysFlag_Arrive( ev_sv, SYSFLAG_MODE_CHECK, FLAG_ARRIVE_T06);

	//ポケモン捜索隊候補チェック
	for(i = 0;i < SEARCH_DATA_MAX;i++){
		if(wk->flag[DATA_SearchTable[i]]){
			wk->data[num++] = i;
		}
	}
	wk->msg_id = gf_rand()%num;
	if(wk->msg_id == man->pass_work){
		wk->msg_id = (wk->msg_id+1)%num;
	}
	man->pass_work = wk->msg_id;
}

/**
 *	@brief	ポケモン捜索隊用　リソース解放
 */
static void search_ResRelease(PM_RADIO_MAN* man)
{
	RADIO_SEARCH_WORK* wk = (RADIO_SEARCH_WORK*)man->ch_wk;

	MSGMAN_Delete(man->msg_prog);
}
